﻿using Library.Linq.Expressions;
using Library.Logic.Constraints;
using System;
using System.Linq.Expressions;
using System.Reflection;

namespace Library.Logic
{
    //public static partial class Builtin
    //{
    //    public static Delegate Compile(this Library.Linq.Expressions.LambdaExpression lambdaExpression)
    //    {
    //        throw new NotImplementedException();
    //    }

    //    public static class Expressions
    //    {
    //        public static ContainsExpression Contains(Expression container, Expression element)
    //        {
    //            return new ContainsExpression(container, element, null);
    //        }

    //        public static ContainsExpression Contains(Expression container, Expression element, MethodInfo method)
    //        {
    //            return new ContainsExpression(container, element, method);
    //        }



    //        public static EntailsExpression Entails(Expression left, Expression right, Expression reasoner)
    //        {
    //            return new EntailsExpression(left, right, reasoner);
    //        }



    //        public static ExistentialQuantificationExpression Exists(Expression variable, Expression expression, Expression reasoner)
    //        {
    //            return new ExistentialQuantificationExpression(variable, expression, reasoner);
    //        }

    //        public static UniqueQuantificationExpression Unique(Expression variable, Expression expression, Expression reasoner)
    //        {
    //            return new UniqueQuantificationExpression(variable, expression, reasoner);
    //        }

    //        public static UniversalQuantificationExpression ForAll(Expression variable, Expression expression, Expression reasoner)
    //        {
    //            return new UniversalQuantificationExpression(variable, expression, reasoner);
    //        }



    //        public static VariableExpression Variable(IHasElementConstraintsReadOnly set)
    //        {
    //            throw new NotImplementedException();
    //        }

    //        public static VariableExpression Variable(Type type)
    //        {
    //            throw new NotImplementedException();
    //        }

    //        public static VariableExpression Variable(ParameterExpression parameter, params Expression[] constraints)
    //        {
    //            throw new NotImplementedException();
    //        }

    //        public static VariableExpression Variable(ParameterExpression parameter, ParameterExpression argumentParameter, params Expression[] constraints)
    //        {
    //            throw new NotImplementedException();
    //        }
    //    }
    //}
}
